package supremeragcalc.util.gui;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

/**
 * 
 * @author André
 */
public class GenericRagButton extends JLabel implements MouseListener, SkinConstants{

	private ImageIcon icon = null;
	private GenericImage BT_STAND	= null;
	private GenericImage BT_PRESSED	= null;
	private GenericImage BT_DISABLE	= null;
	//private String BT_STAND	= PATHSKIN + "arw_right.bmp";
	//private String BT_PRESSED	= PATHSKIN + "arw_right_on.bmp";
	//private String BT_DISABLE	= PATHSKIN + "arw_right_on.bmp";
	private boolean enable = true;


	/**
	 * Contrutor: Só é necessário passar o nome do arquivo imagem,
	 * não é necessário o caminho até o arquivo.
	 * Para mudar o caminho é preciso mudá-lo em SkinConstants
	 * Obrigatório ao menos ter a imagem não-nula de btStand
	 * @param btStand - nome do arquivo
	 * @param btPressed - nome do arquivo
	 * @param btDisable - nome do arquivo
	 */
	public GenericRagButton(String btStand, String btPressed, String btDisable) {
		this(
			new GenericImage(PATHSKIN + btStand),
			new GenericImage(PATHSKIN + btPressed),
			new GenericImage(PATHSKIN + btDisable)
		);
	}

	/**
	 * Construtor
	 * @param btStand - objeto imagem
	 * @param btPressed - objeto imagem
	 * @param btDisable - objeto imagem
	 */
	public GenericRagButton(GenericImage btStand, GenericImage btPressed, GenericImage btDisable) {
		if(btStand == null) { throw new NullPointerException("btStand == null"); }
		//if(btPressed == null) { throw new NullPointerException("btPressed == null"); }
		//if(btDisable == null) { throw new NullPointerException("btDisable == null"); }

		this.BT_STAND = btStand;
		this.BT_PRESSED = btPressed;
		this.BT_DISABLE = btDisable;

		this.addMouseListener(this);
		changeIcon(BT_STAND);
	}

	public void changeIcon(GenericImage img) {
		// Se as imagens forem iguais não é necessário este precedimento
		if(img == null) { return; }
		if(this.icon != null) {
			if(this.icon.getImage() == img.getImage()) { return; }
		}

		icon = new ImageIcon(img.getImage());
		this.setIcon(icon);

		int w = img.getImage().getWidth(null);
		int h = img.getImage().getHeight(null);
		this.setSize(w, h);
	}

	public void setEnable(boolean enable) {
		this.enable = enable;
		if(isEnable()) {
			changeIcon(BT_STAND);

		} else {
			changeIcon(BT_DISABLE);
		}
	}

	public boolean isEnable() {
		return enable;
	}

	//Mouse methods Implemented
	public void mouseClicked(MouseEvent e) {}

	public void mouseEntered(MouseEvent e) {}

	public void mouseExited(MouseEvent e) {}

	public void mousePressed(MouseEvent e) {
		if(isEnable()) {
			changeIcon(BT_PRESSED);
		}
	}

	public void mouseReleased(MouseEvent e) {
		if(isEnable()) {
			changeIcon(BT_STAND);
		}
	}
}
